              <div align="right">
${TARGET="offline"}                <a href="${LDAP_SDK_HOME_URL}" style="font-size: 85%">LDAP SDK Home Page</a>
${TARGET="offline"}                <br>
                <a href="${BASE}index.${EXTENSION}" style="font-size: 85%">Product Information</a>
                <br>
                <a href="index.${EXTENSION}" style="font-size: 85%">Using the LDAP SDK Persistence Framework</a>
              </div>

              <h2>The <tt>@LDAPField</tt> Annotation Type</h2>

              <p>
                The <tt>@LDAPField</tt> annotation type may be used to mark Java fields whose
                values should be stored in LDAP attributes.  When encoding an entry from the
                object, the value(s) for the field will be encoded to an LDAP attribute, and when
                initializing a Java object from an LDAP entry, the value(s) of the corresponding
                attribute will be assigned to the marked field.  The logic used to perform this
                encoding and decoding is provided by an instance of an <tt>ObjectEncoder</tt>
                class.  A <tt>DefaultObjectEncoder</tt> class is included as part of the LDAP SDK
                persistence framework, and information about the data types that it supports is
                available in the <a href="data-types.${EXTENSION}">supported data types</a> page.
              </p>

              <p>
                Fields that are marked with the <tt>@LDAPField</tt> annotation type must not be
                marked with any other annotation type used by the LDAP SDK persistence framework,
                like <tt>@LDAPDNField</tt> or <tt>@LDAPEntryField</tt>.  They must not be declared
                <tt>final</tt> or <tt>static</tt>, but they may have any visibility level
                (including <tt>public</tt>, <tt>private</tt>, <tt>protected</tt> or the default
                package-level access).
              </p>

              <p>
                Elements that may be included in the <tt>@LDAPField</tt> annotation type
                include:
              </p>

              <ul>
                <li>
                  <tt>attribute</tt> -- This element is used to specify the name (or OID) of the
                  attribute that will be used to hold the value(s) of the field in LDAP entries.
                  This attribute should be defined in the directory server schema, and it should be
                  allowed by at least one of the structural or auxiliary object classes referenced
                  in the <tt>@LDAPObject</tt> annotation used to mark the Java class.  If this is
                  not provided, then it will be assumed that LDAP attribute has the same name as
                  the Java field.
                  <br><br>
                </li>

                <li>
                  <tt>objectClass</tt> -- This element is used to specify the name(s) of the LDAP
                  object classes that allow the associated attribute.  This is primarily used when
                  generating LDAP schema definitions from annotated Java source code using the
                  <tt>generate-schema-from-source</tt> tool.  If it is not provided, then it will
                  be assumed that the attribute is included in the structural object class.
                  <br><br>
                </li>

                <li>
                  <tt>inRDN</tt> -- This element is used to indicate whether the attribute should
                  be included in the RDN for entries generated from Java objects of the associated
                  type.  At least one <tt>@LDAPField</tt> or <tt>@LDAPGetter</tt> annotation
                  defined in the class must indicate that the associated attribute should be
                  included in the entry's RDN.  If this element is not provided, then it will be
                  assumed that the corresponding field should not be used to construct the entry's
                  RDN.
                  <br><br>
                </li>

                <li>
                  <tt>inAdd</tt> -- This element is used to indicate whether the attribute created
                  from the associated field should be included when adding an entry created from
                  an instance of the object to the directory.  It may be <tt>false</tt> if the
                  attribute should be generated by the directory server or populated through some
                  other means.  If this element is not provided, then it will have a default value
                  of <tt>true</tt>.  Note that if the <tt>inRDN</tt> element is present with a
                  value of <tt>true</tt>, then the attribute will always be included in add
                  operations regardless of the value of the <tt>inAdd</tt> element.
                  <br><br>
                </li>

                <li>
                  <tt>inModify</tt> -- This element is used to indicate whether changes to the
                  value(s) of the marked field should be applied to the corresponding entry when
                  performing an LDAP modify operation.  It may be <tt>false</tt> if the attribute
                  should not be updated by modify operations (e.g., if it should only be written
                  in add operations).  If this element is not provided, then it will have a default
                  value of <tt>true</tt>.  Note that if the <tt>inRDN</tt> element is present with
                  a value of <tt>true</tt>, then the attribute will never be included in modify
                  operations regardless of the value of the <tt>inModify</tt> element.
                  <br><br>
                </li>

                <li>
                  <tt>filterUsage</tt> -- This element is used to indicate whether the associated
                  field should be used when generating a search filter to search for entries that
                  correspond to objects of the associated type.  It may have a value of
                  <tt>REQUIRED</tt> (to indicate that the field must have a value in order to be
                  able to generate a search filter for the object), <tt>ALWAYS_ALLOWED</tt> (to
                  indicate that it may be present by itself or in conjunction with other fields or
                  getter methods when generating the search filter), <tt>CONDITIONALLY_ALLOWED</tt>
                  (to indicate that it may only be used in conjunction with other fields or getter
                  methods that are <tt>REQUIRED</tt> or <tt>ALWAYS_ALLOWED</tt>), or
                  <tt>EXCLUDED</tt> (to indicate that this field will never be included in
                  generated search filters).  If this element is not provided, then it will have a
                  default value of <tt>CONDITIONALLY_ALLOWED</tt>.
                  <br><br>
                </li>

                <li>
                  <tt>failOnInvalidValue</tt> -- This element is used to indicate whether attempts
                  to initialize a Java object with information from an LDAP entry should fail if
                  the corresponding attribute has an invalid value for the associated field (e.g.,
                  the field has a type of <tt>Integer</tt> but the attribute value cannot be parsed
                  as an integer).  If this is <tt>false</tt> then any such decoding errors will be
                  ignored and the corresponding fields will be left uninitialized.  If this element
                  is not provided, then it will have a default value of <tt>true</tt>.
                  <br><br>
                <li>
                  <tt>failOnTooManyValues</tt> -- This element is used to indicate whether attempts
                  to initialize a Java object with information from an LDAP entry should fail if
                  the corresponding attribute has multiple values but the associated field can only
                  hold a single value.  If this is <tt>false</tt> then only the first value will be
                  used to initialize the corresponding field and all other values will be ignored.
                  If this element is not provided, then it will have a default value of
                  <tt>true</tt>.
                  <br><br>
                </li>

                <li>
                  <tt>requiredForDecode</tt> -- This element is used to indicate whether the
                  associated attribute must be present in an LDAP entry in order to successfully
                  initialize an object.  If this is <tt>true</tt> then an attempt to decode an
                  entry that does not contain the associated attribute will fail.  If this element
                  is not provided, then it will have a default value of <tt>false</tt>, and the
                  field will remain uninitialized if the associated attribute is not present when
                  attempting to decode an entry.
                  <br><br>
                </li>

                <li>
                  <tt>requiredForEncode</tt> -- This element is used to indicate whether the field
                  must have a non-<tt>null</tt> value when encoding an instance of the associated
                  class to an LDAP entry.  If this is <tt>true</tt> and the associated field does
                  not have a non-<tt>null</tt> value, then attempts to encode the object to an
                  entry will fail.  If this element is not provided, then it will have a default
                  value of <tt>false</tt> and the corresponding attribute will be omitted from the
                  generated entry if the field has a <tt>null</tt> value.
                  <br><br>
                </li>

                <li>
                  <tt>defaultDecodeValue</tt> -- This element is used to specify the default
                  value(s) that should be used for the field if the associated attribute is not
                  present in an entry being used to initialize an object instance.  If one or more
                  values are provided, then they should be in the format in which they would be
                  represented in the attribute.  If this element is not provided, then no default
                  decode values will be used.
                  <br><br>
                </li>

                <li>
                  <tt>defaultEncodeValue</tt> -- This element is used to specify the default
                  value(s) that should be used for the field if it is not set when encoding an
                  object to an LDAP entry.  If one or more values are provided, then they should be
                  in the format in which they should be stored in the attribute.  If this element
                  is not provided, then no default encode values will be used.
                  <br><br>
                </li>

                <li>
                  <tt>encoderClass</tt> -- This element is used to specify the class that provides
                  the logic that will be used to encode the field value(s) to an LDAP attribute,
                  and to initialize the field value(s) from an LDAP attribute.  If a value is
                  specified, then it must represent a Java class which is a subclass of
                  <tt>com.unboundid.ldap.sdk.persist.ObjectEncoder</tt>.  If this element is not
                  provided, then a default value of
                  <tt>com.unboundid.ldap.sdk.persist.DefaultObjectEncoder</tt> will be used.
                  <br><br>
                </li>
              </ul>
